• Jump To … +
    main.js separate.js single.js web-apg-api.js main.js web-conv-api.js ast.js csv.js dangling-else.js display.js flags.js float.js limits.js main.js multiline-mode.js recursive.js replace.js rules.js split.js testonly.js trace.js udt.js unicode.js web-email.js word-boundaries.js main.js phone-number.js web-main.js web-phone-number.js main.js phone-number.js setup.js translate.js xml.js branch-fail-grammar.js main.js parent-mode-grammar.js setup.js universal-mode-grammar.js colors-app.js colors-callbacks.js colors.js main.js more-app.js more-setup.js more.js ast-callbacks.js bad-input.js basic.js ini-file.js main.js parser-callbacks.js setup.js trace.js anbncn.js and.js c-comment.js compound.js main.js nested.js not.js setup.js boundaries-grammar.js boundaries.js comment-grammar.js comment.js main.js negative-grammar.js negative.js positive-grammar.js positive.js setup.js main.js odata-grammar.js run.js setup.js area-code.js lookaround.js main.js phone-number.js setup.js simple.js all-operators.js default.js fancy-number.js limited-lines.js main.js select-operators.js select-rules.js setup.js main.js minimal.js parent-u.js parent.js phone-number.js setup.js stats.js trace.js universal-u.js universal.js callbacks.js grammar.js main.js parser.js writeHtml.js LICENSE.md README.md index.md
  • setup.js

  • §
    /* eslint-disable new-cap */
    /*  *************************************************************************************
     *   copyright: Copyright (c) 2021 Lowell D. Thomas, all rights reserved
     *     license: BSD-2-Clause (https://opensource.org/licenses/BSD-2-Clause)
     *   ********************************************************************************* */
  • §

    General execution module for the substring examples.

    module.exports = function setup(input, beg, len, grammar, name) {
      const nodeUtil = require('node:util');
      const opts = {
        showHidden: true,
        depth: null,
      };
  • §

    Quick and dirty conversion of ascii chars to HTML format. Needed for HTML display of grammars that contain HTML entity characters.

      const charsToHtml = function charsToHtml(chars) {
        let html = '';
        chars.forEach((char) => {
          switch (char) {
            case 32:
              html += ' ';
              break;
            case 38:
              html += '&';
              break;
            case 39:
              html += ''';
              break;
            case 60:
              html += '<';
              break;
            case 62:
              html += '>';
              break;
            case 92:
              html += '\';
              break;
            default:
              html += String.fromCharCode(char);
          }
        });
        return html;
      };
      try {
        let html = '';
        let chars;
        const { apgLib } = require('apg-js');
        const writeHtml = require('../writeHtml');
        const parser = new apgLib.parser();
        parser.trace = new apgLib.trace();
        parser.trace.filter.operators['<ALL>'] = true;
    
        /* parse the substring */
        const result = parser.parseSubstring(grammar, 0, input, beg, len);
    
        /* output info to console */
        console.log();
        console.log(`     input: ${input}`);
        console.log('   results:');
        console.dir(result, opts);
    
        /* put input, results and trace on HTML page */
        html += '<h3>Grammar Source</h3>';
        html += '<pre>';
        chars = apgLib.utils.stringToChars(grammar.toString());
        html += charsToHtml(chars);
        html += '</pre>';
        html += '<h3>Input String</h3>';
        html += '<pre>';
        chars = apgLib.utils.stringToChars(input);
        html += apgLib.utils.charsToAsciiHtml(chars);
        html += '</pre>';
        html += apgLib.utils.parserResultToHtml(result);
        html += parser.trace.toHtml('ascii', name);
        html = apgLib.utils.htmlToPage(html);
        writeHtml(html, name);
      } catch (e) {
        let msg = '\nEXCEPTION THROWN: \n';
        if (e instanceof Error) {
          msg += `${e.name}: ${e.message}`;
        } else if (typeof e === 'string') {
          msg += e;
        } else {
          msg += nodeUtil.inspect(e, opts);
        }
        process.exitCode = 1;
        console.log(msg);
        throw e;
      }
    };